package es.goalproject.web.action;

import java.io.Serializable;
//import java.util.ArrayList;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//import java.util.Properties;
//
//import javax.faces.context.FacesContext;
//import javax.faces.event.ActionEvent;
//import javax.faces.model.SelectItem;
//import javax.servlet.http.HttpServletRequest;
//
//import org.jboss.seam.ScopeType;
//import org.jboss.seam.annotations.In;
//import org.jboss.seam.annotations.Logger;
//import org.jboss.seam.annotations.Name;
//import org.jboss.seam.annotations.Out;
//import org.jboss.seam.annotations.Scope;
//import org.jboss.seam.contexts.Contexts;
//import org.jboss.seam.log.Log;
//import org.jboss.seam.security.Identity;
//import org.jboss.seam.web.Session;
//
//import es.goalproject.web.util.MensajesAction;
//import es.guadaltel.framework.authenticator.Authenticator;
//import es.guadaltel.framework.authenticator.AuthenticatorFactory;
//import es.guadaltel.framework.authenticator.exception.AuthenticatorException;
//import es.guadaltel.gonce.gtablon.core.dao.UsuariosQueryService;
//import es.guadaltel.gonce.gtablon.core.dominio.TbOrganismos;
//import es.guadaltel.gonce.gtablon.core.dominio.TbRoles;
//import es.guadaltel.gonce.gtablon.core.dominio.TbRolesUsuariosOrganismos;
//import es.guadaltel.gonce.gtablon.core.dominio.TbUsuarios;
//import es.guadaltel.gonce.gtablon.core.util.Constantes;
//import es.guadaltel.gonce.gtablon.core.util.Util;
//import es.guadaltel.framework.core.User;
//
//@Name("authenticator")
//@Scope(ScopeType.SESSION)
public class AuthenticacionAction implements Serializable {}
//
//	/**
//	 *
//	 */
//	private static final long serialVersionUID = 3575004593425124238L;
//
//	@Logger
//	Log log;
//
//	@In(create = true)
//	MensajesAction mensajes;
//
//	@In(create = true)
//	UsuariosQueryService usuariosQueryService;
//
//	@In(create = true)
//	AnunciosAction anuncios;
//
//	@In
//	private Identity identity;
//
//	@In(scope = ScopeType.APPLICATION)
//	private Properties configurationGTablon;
//
//	@Out(required = false, scope = ScopeType.SESSION)
//	private TbUsuarios usuario;
//
//	@Out(required = false, scope = ScopeType.SESSION)
//	private TbOrganismos organismo;
//
//	@Out(required = false, scope = ScopeType.SESSION)
//	private Map<String, TbRoles> roles;
//
//	private boolean authenticated;
//	private boolean organismoUnico;
//	private List<TbOrganismos> organismosUsuario = new ArrayList<TbOrganismos>();
//
//	public void cerrarSession() {
//		if (log.isDebugEnabled()) {
//			log.debug("Inicio - cerrarSession");
//		}
//		usuario = null;
//		organismo = null;
//		roles = null;
//
//		identity.logout();
////		Session.instance().invalidate();
//
//		if (log.isDebugEnabled()) {
//			log.debug("Fin - cerrarSession");
//		}
//	}
//
//	public void cargarCliente(ActionEvent event) {
//		if (log.isDebugEnabled()) {
//			log.debug("Inicio - cargarCliente");
//		}
//
//		identity.logout();
//
//		HttpServletRequest request = (HttpServletRequest) FacesContext
//				.getCurrentInstance().getExternalContext().getRequest();
//		Authenticator authenticator = AuthenticatorFactory.createInstance();
//		if (authenticator != null) {
//			try {
//				authenticator.getAuthenticationURL(request);
//			} catch (AuthenticatorException e) {
//				log.error(e.getMessage(), e);
//				mensajes.addError("errorClienteFirma", e);
//			}
//		}
//		if (log.isDebugEnabled()) {
//			log.debug("Fin - cargarCliente");
//		}
//	}
//
//	@SuppressWarnings("finally")
//	public boolean authenticate() {
// 		if (log.isDebugEnabled()) {
//			log.debug("Inicio - authenticate");
//		}
//		try {
//			authenticated = false;
//			Authenticator authenticator = null;
//
//			HttpServletRequest request = (HttpServletRequest) FacesContext
//					.getCurrentInstance().getExternalContext().getRequest();
//
//			authenticator = AuthenticatorFactory
//					.createInstance(configurationGTablon
//							.getProperty("authenticator.certificate.impl"));
//			if (authenticator != null) {
//				User user = authenticator.authenticate(request);
//				usuario = usuariosQueryService.obtenerUsuario(user
//						.getIdNumber().toUpperCase());
//				if (usuario != null) {
//
//					organismosUsuario = usuario.obtenerOrganismosUsuario();
//
//					if (organismosUsuario != null
//							&& organismosUsuario.size() > 0) {
//						if (organismosUsuario.size() == 1) {
//							organismoUnico = true;
//							organismo = organismosUsuario.get(0);
//							roles = new HashMap<String, TbRoles>();
//							for (TbRolesUsuariosOrganismos rol : organismo
//									.getTbRolesUsuariosOrganismoses()) {
//								roles.put(rol.getTbRoles().getCrol(), rol
//										.getTbRoles());
//							}
//						} else {
//							organismoUnico = false;
//						}
//						authenticated = true;
//					} else {
//						mensajes.addError("errorUsuarioSinAcceso", null);
//					}
//
//				} else {
//					mensajes.addError("errorNoUsuario", null);
//				}
//			} else {
//				mensajes.addError("error.Authenticacion", null);
//			}
//			if (log.isDebugEnabled()) {
//				log.debug("Fin - authenticate");
//			}
//		} catch (AuthenticatorException e) {
//			log.error(e, e.getMessage());
//			mensajes.addError(e.getMessage(), null);
//			e.printStackTrace();
//		} catch (Exception e) {
//			log.error(e, e.getMessage());
//			mensajes.addError(e.getMessage(), null);
//			e.printStackTrace();
//		} finally {
//			return authenticated;
//		}
//
//	}
//
//	public String seleccionOrganismo() {
//		if (log.isDebugEnabled()) {
//			log.debug("Inicio - seleccionOrganismo");
//		}
//		List<TbRoles> listaRoles = usuariosQueryService
//				.obtenerRolesPorOrganismosUsuario(organismo
//						.getPrimaryKeyString(), usuario.getPrimaryKeyString());
//		roles = new HashMap<String, TbRoles>();
//		for (TbRoles rol : listaRoles) {
//			roles.put(rol.getCrol(), rol);
//		}
//		if (log.isDebugEnabled()) {
//			log.debug("Fin - seleccionOrganismo");
//		}
//		return Constantes.SUCCES_1;
//	}
//
//	public String acceder() {
//		if (log.isDebugEnabled()) {
//			log.debug("Inicio - acceder");
//		}
//		identity.login();
//		if (log.isDebugEnabled()) {
//			log.debug("Fin - acceder");
//		}
//		return "";
//	}
//
//	public String getOrganismoUsuarioItem() {
//		try {
//			if (organismo != null) {
//				return organismo.getPrimaryKeyString();
//			}
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//			e.printStackTrace();
//			mensajes.addError("errorException", e);
//		}
//		return null;
//	}
//
//	public void setOrganismoUsuarioItem(String organismo) {
//		try {
//			if (organismo != null && !"".equals(organismo)) {
//				for (TbOrganismos aux : organismosUsuario) {
//					if (aux.getPrimaryKeyString().equals(organismo)) {
//						this.organismo = aux;
//					}
//				}
//			} else {
//				this.organismo = null;
//			}
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//			e.printStackTrace();
//			mensajes.addError("errorException", e);
//		}
//	}
//
//	public List<SelectItem> getOrganismosUsuarioItem() {
//		List<SelectItem> lista = new ArrayList<SelectItem>();
//		for (TbOrganismos aux : organismosUsuario) {
//			lista.add(new SelectItem(aux.getPrimaryKeyString(), aux
//					.getTnombre()));
//		}
//		return lista;
//	}
//
//	// GETTER AND SETTER
//	public List<TbOrganismos> getOrganismosUsuario() {
//		return organismosUsuario;
//	}
//
//	public void setOrganismosUsuario(List<TbOrganismos> organismosUsuario) {
//		this.organismosUsuario = organismosUsuario;
//	}
//
//	public TbUsuarios getUsuario() {
//		return usuario;
//	}
//
//	public void setUsuario(TbUsuarios usuario) {
//		this.usuario = usuario;
//	}
//
//	public boolean isAuthenticated() {
//		return authenticated;
//	}
//
//	public boolean isOrganismoUnico() {
//		return organismoUnico;
//	}
//
//	/**
//	 * Metodo de autenticacion
//	 *
//	 * @return si se autentica o no
//	 */
//
//	public String entrarDirecto() {
//		usuario = usuariosQueryService.obtenerUsuario("12345678A");
//		if (usuario != null) {
//			organismosUsuario = usuario.obtenerOrganismosUsuario();
//			if (organismosUsuario != null && organismosUsuario.size() > 0) {
//				if (organismosUsuario.size() == 1) {
//					organismoUnico = true;
//					authenticated = true;
//					organismo = organismosUsuario.get(0);
//					List<TbRoles> listaRoles = usuariosQueryService
//							.obtenerRolesPorOrganismosUsuario(organismo
//									.getPrimaryKeyString(), usuario
//									.getPrimaryKeyString());
//					roles = new HashMap<String, TbRoles>();
//					for (TbRoles rol : listaRoles) {
//						roles.put(rol.getCrol(), rol);
//					}
//				} else {
//					organismoUnico = false;
//				}
//			}
//		}
//		return "";
//	}
//
//}
